package com.sky.annotation;


import com.sky.enumeration.OperationType;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
 *1). 管理端功能
 * 员工登录/退出  内部员工必须登录后,才可以访问系统管理后台
 * 员工信息管理   管理员可以在系统后台对员工信息进行管理，包含查询、新增、编辑、禁用等功能
 * 分类管理     主要对当前餐厅经营的 菜品分类 或 套餐分类 进行管理维护， 包含查询、新增、修改、删除等功能
 * 菜品管理  主要维护各个分类下的菜品信息，包含查询、新增、修改、删除、启售、停售等功能
 * 套餐管理  主要维护当前餐厅中的套餐信息，包含查询、新增、修改、删除、启售、停售等功能
 * 菜品口味管理
 * 订单管理   主要维护用户在移动端下的订单信息，包含查询、取消、派送、完成，以及订单报表下载等功能
 * 数据统计   主要完成对餐厅的各类数据统计，如营业额、用户数量、订单等
 * 来单提醒。
 *
 *2). 用户端功能
 *  微信登录   用户需要通过微信授权后登录使用小程序进行点餐
 *  点餐-菜单   在点餐界面需要展示出菜品分类/套餐分类, 并根据当前选择的分类加载其中的菜品信息, 供用户查询选择
 *  点餐-购物车   用户选中的菜品就会加入用户的购物车, 主要包含 查询购物车、加入购物车、删除购物车、清空购物车等功能
 *  订单支付    用户选完菜品/套餐后, 可以对购物车菜品进行结算支付, 这时就需要进行订单的支付
 *  个人信息     在个人中心页面中会展示当前用户的基本信息, 用户可以管理收货地址, 也可以查询历史订单数据
 *  收件人地址管理 , 用户历史订单查询 , 菜品规格查询 , 购物车功能 , 下单 , 支付、分类及菜品浏览。
 *
 */
/**
 * employee  员工表
 * category  分类表
 * dish   菜品表
 * dish_flavor  菜品口味表
 * setmeal  套餐表
 * setmeal_dish  套餐菜品关系表
 * user   用户表
 * adderss_book   地址表
 * shopping_cart   购物车表
 * orders   订单表
 * orders_detail   订单明细表
 */

/**
 * 自定义注解，用于标识某个方法需要进行功能字段自动填充处理
 *
 *  * 1). 自定义注解 AutoFill，用于标识需要进行公共字段自动填充的方法
 *  * 2). 自定义切面类 AutoFillAspect，统一拦截加入了 AutoFill 注解的方法，通过反射为公共字段赋值
 *  * 3). 在 Mapper 的方法上加入 AutoFill 注解
 *
 *  这几个公共字段的填充写成aop切面，注解的形式来减少冗余的代码。但是只有update或者insert相关方法用的上，所以枚举只有update和insert
 *
 *  AOP（面向切面编程）：这是整个功能实现的核心技术，通过AOP技术，可以在不修改原有业务代码的情况下，添加一些额外的处理逻辑。在这个例子中，额外的处理就是自动填充公共字段。
 */
@Target(ElementType.METHOD)     //指定当前这个注解加在哪个位置（指定这个注解只能加在方法上）
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoFill {
    //数据库操作类型：UPDATE INSERT
    //指定当前操作的数据库操作类型，可以通过枚举的方式来指定：OperationType，在enumeration包下
    OperationType value();
    
}
